package 字符串.easy;

/**
 * @author Lw中
 * @date 2020/9/20 9:19
 */
public class YiErWu {

    /**
     * 验证回文串
     * @param s
     * @return
     */
    public static boolean isPalindrome(String s) {
        // 第一步：将字符串中除了数字和字母之外的字符去除
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (Character.isLetterOrDigit(c)) {
                // 将字符统一变为小写
                stringBuffer.append(Character.toLowerCase(c));
            }
        }
        /* 方法一：使用内置函数 */
//        // 第二步：判断字符串是否为回文串
//        // 将去除数字和字母后的字符串反转
//        StringBuffer stringBuffer1 = new StringBuffer(stringBuffer).reverse();
//        return stringBuffer.toString().equals(stringBuffer1.toString());

        /* 方法二：使用双指针 */
        String s1 = stringBuffer.toString();
        /* 定义俩个变量：一个是头指针， 一个是尾指针 */
        int low = 0, high = s1.length() - 1;
        while (low <= high) {
            if (s1.charAt(low) != s1.charAt(high)) {
                return false;
            } else {
                low++;
                high--;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        boolean palindrome = isPalindrome("race a ecar");
        System.out.println(palindrome);
    }

}
